// 客户端
const prisma = require('./prisma')

// 从结果集中筛选,不包括哪些字段
const omitFields = {
  updated_at: true, //
  deleted_at: true,
  sys_user_id: true,
  code: false,
}

class ProjectModel {
  async create(proj) {
    return await prisma.project.create({
      data: {
        name: proj.name,
        code: proj.code,
        sys_user_id: proj.sys_user_id,
      },
    })
  }
  //
  async getByCode(code, where = null) {
    const result = await prisma.project.findUnique({
      where: Object.assign({ code: code }, where),
      omit: omitFields,
    })
    return result
  }
  //
  async get(id, where = null) {
    console.log(id, where, '<< id where ')
    // select 与 include 不能同时使用
    const result = await prisma.project.findFirst({
      where: Object.assign({ id: id }, where),
      // 从结果集中过滤，不包括某些字段
      omit: omitFields, // 不能与select同时使用

      // 查询关联数据
      // include: {
      //   // sys_user: true, // 关联的所有字段
      //   sys_user: {
      //     // include 下的 select 关联字段
      //     select: {
      //       name: true,
      //     },
      //   },
      // },
    })
    return result
  }

  // 列表 这里官方建议使用游标
  async list(pageNo, pageSize, where = null) {
    //
    const skip = (pageNo - 1) * pageSize
    return await prisma.project.findMany({
      omit: omitFields,
      skip: skip,
      take: pageSize,
      orderBy: {
        id: 'desc',
      },
      where: Object.assign({}, where),
    })
  }

  // 未删除的数据
  async count(where = null) {
    return await prisma.project.count({
      where: Object.assign({}, where),
    })
  }

  // 删除
  async del(id, where = null) {
    return await prisma.project.update({
      data: {
        deleted_at: new Date(), // 逻辑删除
      },
      omit: omitFields,
      where: Object.assign({ id: id }, where),
    })
  }
}

module.exports = new ProjectModel()
